﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace BLL.Concrete
{
    public class ImagenBll : BllConnection
    {
        public IQueryable<DataAccess.Image> GetImagenes()
        {
            return db.Images;
        }

        public IQueryable<DataAccess.ImageDB> GetImagenesDB()
        {
            return db.ImageDBs;
        }

        /// <summary>
        /// Inserta una imagen y retorna el ID de esta
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        public int InsertImage(HttpPostedFileBase file)
        {
            byte[] bytes = new byte[file.ContentLength];
            file.InputStream.Read(bytes, 0, file.ContentLength);
            DataAccess.ImageDB imagenDB = new DataAccess.ImageDB { Imagen = bytes };
            db.ImageDBs.InsertOnSubmit(imagenDB);
            db.SubmitChanges();
            DataAccess.Image imagen = new DataAccess.Image
            {
                Nombre = file.FileName,
                Extencion = file.ContentType,
                IdImagen = imagenDB.Id
            };
            db.Images.InsertOnSubmit(imagen);
            db.SubmitChanges();
            return imagen.Id;
        }

        public void UpdateImagen(int idImagen, HttpPostedFileBase file)
        {
            var imagen = GetImagenes().Single(u => u.Id == idImagen);
            int? imagenVieja = imagen.IdImagen;
            imagen.Nombre = file.FileName;
            imagen.Extencion = file.ContentType;
            byte[] bytes = new byte[file.ContentLength];
            file.InputStream.Read(bytes, 0, file.ContentLength);
            imagen.ImageDB = new DataAccess.ImageDB { Imagen = bytes };
            if (imagenVieja != null)
            {
                var oldImage = db.ImageDBs.Single(u => u.Id == imagenVieja);
                db.ImageDBs.DeleteOnSubmit(oldImage);
            }
            db.SubmitChanges();
        }

        public void EliminarImagen(int? idImagen)
        {
            if (idImagen != null)
            {
                var imagen = db.Images.Single(u => u.Id == idImagen);
                int? oldImagen = imagen.IdImagen;
                db.Images.DeleteOnSubmit(imagen);
                if (oldImagen != null)
                {
                    var imagenVieja = GetImagenesDB().Single(u => u.Id == oldImagen);
                    db.ImageDBs.DeleteOnSubmit(imagenVieja);
                }
                db.SubmitChanges();
            }
        }       
    }
}
